﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Data;
using System.Data.SQLite;
using Newtonsoft.Json;

namespace Service
{
    public class VisitadorSvr
    {
        #region Propiedades
        Data.Configuration.Context _Context = new Data.Configuration.Context();
        SQLiteConnection _Conn = new Data.Configuration.Context().GetNewDatabaseConnection();
        #endregion
        public Persona GetPersonaFromSimple(SimplePersona persona)
        {
            Persona p = new Persona(persona, this._Conn);
            p.LoadPosicionActual();
            return p;
        }
        public string GetRevisitasInJson(CollectionPersona personas)
        {
            string json = "";
            json = "";
            if (personas.Count > 0)
            {
                foreach (SimplePersona s in personas)
                {
                    Persona p = new Persona(s, this._Conn);
                    p.LoadPosicionActual();

                    if (String.IsNullOrEmpty(json))
                    {
                        json = "[";
                    }
                    else
                    {
                        json += ",";
                    }
                    json += "{\"Id\":\"" + s.Id + "\",\"Nombre\":\"" + s.Nombre + "\",\"TerrNum\":\"" + p.PosicionActual.TerrNum.ToString() + "\",\"Calle\":\"" + p.PosicionActual.Calle + "\",\"Numero\":\"" + p.PosicionActual.Numero.ToString() + "\",\"Localidad\":\"" + p.PosicionActual.Localidad + "\",\"Provincia\":\"" + p.PosicionActual.Provincia + "\"}";

                }
                json += "]";
            }
            else
            {
                json = "[]";
            }
            return json;
        }

        public CollectionPersona GetRevisitasByFechaUltima(SimpleVisitante visitante, DateTime UltimaFecha)
        {
            CollectionPersona cp = new CollectionPersona(this._Conn);
            CollectionPersona Out = new CollectionPersona();
            cp.LoadByVisitante(visitante.Id);

            foreach (SimplePersona sp in cp)
            {
                Persona p = new Persona(sp, this._Conn);
                p.LoadVisitas();
                if (p.UltimaVisita <= UltimaFecha )
                {
                    Out.Add(sp);
                }
            }
            return Out;
        }
        public CollectionPersona GetRevisitasByTerritorio(SimpleVisitante visitante, int territorio)
        {
            CollectionPersona cp = new CollectionPersona(this._Conn);
            CollectionPersona Out = new CollectionPersona();
            cp.LoadByVisitante(visitante.Id);

            foreach (SimplePersona sp in cp)
            {
                Persona p = new Persona(sp, this._Conn);
                p.LoadPosicionActual();
                if (p.PosicionActual.TerrNum == territorio)
                {
                    Out.Add(sp);
                }
            }
            return Out;
        }
        public CollectionPersona GetRevisitasFromVisitante(SimpleVisitante visitante)
        {
            CollectionPersona cp = new CollectionPersona(this._Conn);
            cp.LoadByVisitante(visitante.Id);
            return cp;
        }

        public SimpleVisitante checkUser(string Username, string Pass)
        {
            Visitante v = new Visitante(this._Conn);
            v.Load(Username);
            if (v.Simple == null)
            {
                return null;
            }
            else
            {
                if (String.Equals(v.Simple.Password, Pass))
                {
                    return v.Simple;
                }
                else
                {
                    return null;
                }
            }

        }
        public SimpleVisitante getUserById(int Id)
        {
            Visitante v = new Visitante(this._Conn);
            v.Load(Id);
            if (v.Simple == null)
            {
                return null;
            }
            else
            {
                return v.Simple;
            }

        }
        public SimpleVisitante CrearUsuario(string Username, string Pass, string Fullname, string Direccion, int Numero, string Localidad, string Provincia)
        {

            Visitante v = new Visitante(this._Conn);
            v.Load(Username);
            if (v.Simple == null)
            {
                SimpleVisitante sv = new SimpleVisitante();
                sv.UserName = Username;
                sv.Password = Pass;
                sv.FullName = Fullname;
                sv.FechaIngreso = DateTime.Now;
                sv.Direccion = Direccion;
                sv.Numero = Numero;
                sv.Localidad = Localidad;
                sv.Provincia = Provincia;


                v = new Visitante(sv, this._Conn);
                v.Insert();
                return v.Simple;
            }
            return null;
        }
        public SimplePersona CrearVisita(SimpleVisitante Visitante, string Nombre, int Edad, string Genero, string Calle, int Numero, string Departamento, string Localidad, string Provincia, int Territorio, string NotaPosicion, DateTime Fecha, string Literatura, string NotaVisita)
        {
            SimplePersona sp = new SimplePersona(Nombre, Edad, Genero, Visitante.Id);
            Persona p = new Persona(sp, this._Conn);
            p.Insert();
            SimplePosicion spo = new SimplePosicion(Calle, Numero, Departamento, Localidad, Provincia, Territorio, p.Simple.Id, NotaPosicion);
            Posicion pp = new Posicion(spo, this._Conn);
            pp.Insert();
            SimpleVisita sv = new SimpleVisita(Fecha, Literatura, NotaVisita, true, p.Simple.Id);
            Visita v = new Visita(sv, this._Conn);
            v.Insert();

            return sp;
        }

    }
}
